var createError = require('http-errors')
var express = require('express')
var path = require('path')
var cookieParser = require('cookie-parser')
var logger = require('morgan')
var ejs = require('ejs')

var indexRouter = require('./routes/index')

var app = express()

let session = require('express-session') //session组件
let mongoStore = require('connect-mongo') //将session设置的sid存入mongo数据库
//设置session中间件,一定要写在路由上面！！！
app.use(
  session({
    name: 'sid', //设置cookie的name，默认值是connect.sid
    secret: 'bear', //参与加密的字符串（又称签名）加盐
    saveUninitialized: false, //是否为每次请求都设置一个cookie用来存储session,不必理会，eg：匿名用户
    resave: true, //是否在每次请求时重新保存session，即用户活跃则不会退出登录
    store: mongoStore.create({
      mongoUrl: 'mongodb://127.0.0.1:27017/test', //数据库的连接配置
    }),
    cookie: {
      httpOnly: true,
      maxAge: 1000 * 60 * 10, //控制sessionID的过期时间
    },
  })
)

// view engine setup
app.set('views', path.join(__dirname, 'views'))
app.set('view engine', 'ejs')
app.engine('html', ejs.__express)
app.set('view engine', 'html')

app.use(logger('dev'))
app.use(express.json())
app.use(express.urlencoded({ extended: false }))
app.use(cookieParser())
app.use(express.static(path.join(__dirname, 'public')))

app.use('/', indexRouter)

// catch 404 and forward to error handler
app.use(function (req, res, next) {
  next(createError(404))
})

// error handler
app.use(function (err, req, res, next) {
  // set locals, only providing error in development
  res.locals.message = err.message
  res.locals.error = req.app.get('env') === 'development' ? err : {}

  // render the error page
  res.status(err.status || 500)
  res.render('error')
})

module.exports = app
